Computer software applications are oftentimes run as processes that include multiple different threads, with each thread performing particular tasks or carrying out particular functionality of the application. These multiple threads are typically scheduled to run at different times on a processor. A thread is put to sleep when it is not scheduled to run, and then woken up when it is scheduled to run. Although running programs with different threads can have performance improvements, it is not without its problems. One such problem is that situations can arise where a thread is waiting for a particular variable to have a particular value, and does not proceed until that particular variable has that particular value. This can result in the thread being repeatedly woken up to run, only to have the thread be put back to sleep because that particular variable does not yet have that particular value. Such results can lead to inefficient scheduling of threads and reducing the performance of the computer running the application.